/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.saber.certificacao.beansjsf.principal;

import br.com.saber.certificacao.beansjsf.login.LoginManager;
import br.com.saber.certificacao.beansjsf.semescopo.FluxoExibicaoMaster;
import br.com.saber.certificacao.utils.UtilMetodos;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author gbvbahia
 */
@ManagedBean(name = "fluxoExibicaoPrincipal")
@ViewScoped
public class FluxoExibicao extends FluxoExibicaoMaster {

    private boolean exibirUsuariosLogados;
    private boolean exibirQuantidadeQuestoes;
    private boolean exibirInicioRapido;
    private boolean exibirSobre;
    
    @ManagedProperty("#{loginManager}")
    private LoginManager loginManager;

    private enum PaginaFluxo {

        USUARIOS, QUANTIDADE_QUESTOES, INICIO_RAPIDO, SOBRE;
    }

    /** Creates a new instance of FluxoExibicao */
    public FluxoExibicao() {
    }

    //====================
    // Iniciadores
    //====================
    @Override
    @PostConstruct
    public void init() {
        if (this.loginManager.getUsuario().getId() == null || this.loginManager.getUsuario().getAcessos() > 1) {
            metodoExibirQuantidadeQuestoes();
        } else {
            metodoExibirInicioRapido();
        }
        Logger.getLogger(FluxoExibicao.class.getName()).log(Level.FINEST, "FluxoExibicao Principal:(init()) chamado...");
    }

    @Override
    @PreDestroy
    public void end() {
        Logger.getLogger(FluxoExibicao.class.getName()).log(Level.FINEST, "FluxoExibicao Principal: (end()) chamado...");
    }

    public void metodoExibirUsuariosLogados() {
        alterarTela(PaginaFluxo.USUARIOS);
    }

    public void metodoExibirQuantidadeQuestoes() {
        alterarTela(PaginaFluxo.QUANTIDADE_QUESTOES);
    }

    public void metodoExibirInicioRapido() {
        alterarTela(PaginaFluxo.INICIO_RAPIDO);
    }
    
    public void metodoExibirSobre(){
        alterarTela(PaginaFluxo.SOBRE);
    }

    private void alterarTela(PaginaFluxo paginaLogin) {
        exibirUsuariosLogados = (PaginaFluxo.USUARIOS.equals(paginaLogin));
        exibirQuantidadeQuestoes = (PaginaFluxo.QUANTIDADE_QUESTOES.equals(paginaLogin));
        exibirInicioRapido = (PaginaFluxo.INICIO_RAPIDO.equals(paginaLogin));
        exibirSobre = (PaginaFluxo.SOBRE.equals(paginaLogin));
        definirAtributos(paginaLogin);
    }

    private void definirAtributos(PaginaFluxo paginaLogin) {
        FacesContext fc = FacesContext.getCurrentInstance();
        switch (paginaLogin) {
            case USUARIOS:
                this.tituloRichPanel = UtilMetodos.getResourceBundle("richpanelUsuariosLogados", fc);
                this.imgURLNormal = "aluno_48.png";
                break;
            case QUANTIDADE_QUESTOES:
                this.tituloRichPanel = UtilMetodos.getResourceBundle("richpanelQuantidadeQuestoes", fc);
                this.imgURLNormal = "chart_48.png";
                break;
            case INICIO_RAPIDO:
                this.tituloRichPanel = UtilMetodos.getResourceBundle("richpanelInicioRapido", fc);
                this.imgURLNormal = "play_48.png";
                break;
                case SOBRE:
                this.tituloRichPanel = UtilMetodos.getResourceBundle("richpanelSobre", fc);
                this.imgURLNormal = "globo_48.png";
                break;
            default:
                throw new AssertionError("Não foi definido case para a enum: " + paginaLogin.toString());
        }
    }

    //=========================
    //Getters AND Setters
    //=========================
    public boolean isExibirUsuariosLogados() {
        return exibirUsuariosLogados;
    }

    public void setExibirUsuariosLogados(boolean exibirUsuariosLogados) {
        this.exibirUsuariosLogados = exibirUsuariosLogados;
    }

    public boolean isExibirQuantidadeQuestoes() {
        return exibirQuantidadeQuestoes;
    }

    public void setExibirQuantidadeQuestoes(boolean exibirQuantidadeQuestoes) {
        this.exibirQuantidadeQuestoes = exibirQuantidadeQuestoes;
    }

    public boolean isExibirInicioRapido() {
        return exibirInicioRapido;
    }

    public void setExibirInicioRapido(boolean exibirInicioRapido) {
        this.exibirInicioRapido = exibirInicioRapido;
    }

    public LoginManager getLoginManager() {
        return loginManager;
    }

    public void setLoginManager(LoginManager loginManager) {
        this.loginManager = loginManager;
    }

    public boolean isExibirSobre() {
        return exibirSobre;
    }

    public void setExibirSobre(boolean exibirSobre) {
        this.exibirSobre = exibirSobre;
    }
}
